#ifndef COMMON_H
#define COMMON_H

#ifndef _UNICODE
#define _UNICODE
#endif
#ifndef UNICODE
#define UNICODE
#endif

#ifndef _MAX_PATH
#define _MAX_PATH 1024
#endif

#include <libgen.h>
#include <list>
#include <locale>
#include <stdio.h>
#include <string>
#include <unistd.h>

#if defined _DEBUG && !defined DEBUG
#define DEBUG
#endif

#ifdef DEBUG
const bool debugEnable = true;
#else
const bool debugEnable = false;
#endif

#ifdef __amd64
#define X64
#endif

typedef std::string String;
typedef char TCHAR;

enum Error {
    ERR_OK, // no error
    ERR_LOAD_JVM_DLL,
    ERR_CREATE_JVM,
    ERR_MAIN_CLASS_NOT_FOUND,
    ERR_RUN_MAIN_METHOD
};

class Common final {
  private:
    Common(void);                   // 默认构造函数
    Common(Common const &);         // 拷贝构造函数
    void operator=(Common const &); // 重载赋值运算符
    String exePath;
    String exeDir;
    std::list<String> commandLineArgs;

  public:
    static Common &getInstance();
    ~Common(void);
    void showMessageBox(bool error, const String &message);
    void debug(const String &message);
    bool isFileExists(const String &filename);
    String getExePath(); // 获取可执行文件的全路径
    String getExeDir();  // 获取可执行文件所在目录
    String getEnvVar(const String &name);
    std::list<String> splitString(const String &text, const TCHAR &delimiter);
    String trimString(String &text);
    const String wstring2utf8(const std::wstring &text);
    void setCommandLineArgs(const std::list<String> &args);
    std::list<String> getCommandLineArgs();
};

#endif // COMMON_H